package serveur_client;

import technique.NoeudImpl;
import technique.NoeudIntf;
import fonctionnel.*;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
import java.net.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;

/**
 * Classe Client qui crée un nouveau noeud, affiche le menu, se connecte au serveur
 * @author S Jousselin / M Quin / V Delcroix
 */
public class NoeudClientServeur {
    public static final String repertoire ="C:\\temp";

    public NoeudClientServeur()
    {
        super();
    }

    /**
     * Menu de l'application
     * @param n noeud
     */
    public void Menu(Noeud n) throws UnknownHostException
    {
        BufferedReader clavier = new BufferedReader(new InputStreamReader(System.in));
        int choix=20;
        boolean quit = false;

        do
        {
            System.out.println("---------Menu---------");
            System.out.println("1. Liste des fichiers");
            System.out.println("2. Assigner degre à un fichier");
            System.out.println("3. Ajouter un noeud de confiance");
            System.out.println("4. Supprimer un noeud de confiance");
            System.out.println("5. Nettoyer fichiers dupliqués");
            System.out.println("6. Recuperer un fichier perdu");
            System.out.println("7. Gestion des autorisations des fichiers");
            System.out.println("8. Recuperation d'une version de fichier");
            System.out.println("0. Quitter");

            try
            {
                choix= Integer.parseInt(clavier.readLine());
            }
            catch(Exception e)
            {
                e.getMessage();
            }
           
            switch (choix)
            {
                case 1:
                    System.out.println("liste des fichiers present dans le repertoire");
                    n.listerFichier();
                    break;
                case 2:
                    n.assignerDegre();
                    break;
                case 3:
                    System.out.println("Ajout d'un noeud de confiance");
                    n.ajoutNoeudConfiance();
                    break;
                case 4:
                    System.out.println("Suppression d'un noeud de confiance");
                    n.suppressionNoeudConfiance();
                    break;
                case 5:
                    n.nettoyerFicRep();
                    break;
                case 6:
                    n.recupFichier();
                    break;
                case 7:
                    n.gestionAutorisationsParFichier();
                    break;
                case 8:
                    n.recuperationVersionFichier();
                    break;
                case 0:
                     quit = true;
                     break;
                 default:
                     System.out.println("Choix invalide");
            }
           
        } while (!quit);

    }

    public static void main (String[] args)throws Exception
    {
        String adresse=InetAddress.getLocalHost().getHostAddress();
        try
        {
            NoeudImpl obj = new NoeudImpl(repertoire);
            NoeudIntf stub=(NoeudIntf)UnicastRemoteObject.exportObject(obj,0);
            Registry registre=LocateRegistry.createRegistry(1099);
            registre.rebind(adresse,stub);
        }
        catch (Exception e)
        {
            System.out.println("Noeud déjà connecté");
            System.exit(0);
        }

        NoeudClientServeur c= new NoeudClientServeur();
        Noeud n = new Noeud(adresse, repertoire);
        c.Menu(n);
        System.exit(0);
    }

}
